package cn.sdormitory.common.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class ChineseToNumberUtil {
    private  static HashMap<Character,Integer> number=new HashMap<Character,Integer>(){{
        put('一',1);
        put('二',2);
        put('三',3);
        put('四',4);
        put('五',5);
        put('六',6);
        put('七',7);
        put('八',8);
        put('九',9);
    }};

    private final static HashMap<Character,Integer> digit=new HashMap<Character,Integer>(){{
        put('十',10);
        put('百',100);
        put('千',1000);
        put('万',10000);
        put('亿',100000000);
    }};

   private static List<Integer> temp=new ArrayList<>();
    public static int toNumber(String str){
        boolean ok=process(str);
        int res=0;
        if(ok){
            for(int i:temp){
                res+=i;
            }
        }
        temp = new ArrayList<>();
        return res;
    }

    public static boolean process(String input){
        if(input.equals(""))
            return true;
        else if(digit.containsKey(input.charAt(0))){
            if(temp.size()==0 || temp.get(temp.size()-1) >= digit.get(input.charAt(0))){
                return false;
            }
            int cur=0;
            while(temp.size()>=1 && temp.get(temp.size()-1) < digit.get(input.charAt(0))){
                cur+=temp.get(temp.size()-1);
                temp.remove(temp.size()-1);
            }
            temp.add(cur*digit.get(input.charAt(0)));
            return process(input.substring(1));
        }else if(number.containsKey(input.charAt(0))){
            temp.add(number.get(input.charAt(0)));
            return process(input.substring(1));
        }else if(input.charAt(0)=='零'){
            return process(input.substring(1));
        }else{
            return false;
        }
    }
}
